home *** CD-ROM | disk | FTP | other *** search
- -- stack: in
- -- format: 8 (HyperCard 1)
- -- flags: 0x1000 (none)
- -- protect password hash: 0
- -- maximum user level: 5 (scripting)
- -- window: Rect(x1=0, y1=0, x2=0, y2=0)
- -- screen: Rect(x1=0, y1=0, x2=0, y2=0)
- -- card dimensions: w=0 h=0
- -- scroll: x=0 y=0
- -- background count: 1
- -- first background id: 2574
- -- card count: 2
- -- first card id: 3233
- -- list block id: 2830
- -- print block id: 0
- -- font table block id: 0
- -- style table block id: 0
- -- free block count: 0
- -- free size: 0 bytes
- -- total size: 19744 bytes
- -- stack block size: 13312 bytes
- -- created by hypercard version: 0x00000000
- -- compacted by hypercard version: 0x01228000
- -- modified by hypercard version: 0x01228000
- -- opened by hypercard version: 0x01228000
- -- patterns[0]: 0x0000000000000000
- -- patterns[1]: 0x8000000008000000
- -- patterns[2]: 0x8800220088002200
- -- patterns[3]: 0x8888222288882222
- -- patterns[4]: 0x88AA22AA88AA22AA
- -- patterns[5]: 0xCCAA33AACCAA33AA
- -- patterns[6]: 0xEEAABBAAEEAABBAA
- -- patterns[7]: 0xEEBBBBEEEEBBBBEE
- -- patterns[8]: 0xFFBBFFEEFFBBFFEE
- -- patterns[9]: 0xFFBBFFFFFFBBFFFF
- -- patterns[10]: 0x8010022001084004
- -- patterns[11]: 0xFFFFFFFFFFFFFFFF
- -- patterns[12]: 0x8822882288228822
- -- patterns[13]: 0x1122448811224488
- -- patterns[14]: 0xC4800C6843023026
- -- patterns[15]: 0xB130031BD8C00C8D
- -- patterns[16]: 0xAA00AA00AA00AA00
- -- patterns[17]: 0x8822552288225522
- -- patterns[18]: 0x8855225588552255
- -- patterns[19]: 0x77DD77DD77DD77DD
- -- patterns[20]: 0x8000000000000000
- -- patterns[21]: 0xAA55AA55AA55AA55
- -- patterns[22]: 0x038448300C020101
- -- patterns[23]: 0x8244394482010101
- -- patterns[24]: 0x8814224188412214
- -- patterns[25]: 0x8080413E080814E3
- -- patterns[26]: 0x22048C7422179810
- -- patterns[27]: 0xBE808808EB088880
- -- patterns[28]: 0x25C8328964244C92
- -- patterns[29]: 0xA29C41BE2AC914EB
- -- patterns[30]: 0x40A00000040A0000
- -- patterns[31]: 0x8040200002040800
- -- patterns[32]: 0xAA00800088008000
- -- patterns[33]: 0xFF80808080808080
- -- patterns[34]: 0x081C22C180010204
- -- patterns[35]: 0xFF808080FF080808
- -- patterns[36]: 0xF87422478F172271
- -- patterns[37]: 0xBF00BFBFB0B0B0B0
- -- patterns[38]: 0xFF7FBE5DA2418000
- -- patterns[39]: 0xFAF5FAF5A050A050
- -- checksum: 0x0
- ----- HyperTalk script -----
- on domenu menu -- Script added by Animatrix 7/14/89
- global RPstackname,RPcardname
- if menu is in "Home,Quit HyperCard" then
- if RPstackname is not empty then
- answer "This will return to "&RPStackname&"."
- set cursor to watch
- lock screen
- go card RPcardname of stack RPstackname
- unlock screen with dissolve
- exit domenu
- else pass domenu -- if RPstackname is empty
- else
- pass domenu -- if menu is not in home or quit
- end if
- end domenu
-
- on openStack
- defineStruct
- set the lineSize to 1
- set the pattern to 1
- show message at 22,300
- end openStack
-
- on closeStack
- put empty into message
- set the pattern to 12
- end closeStack
-
- on openCard
- global rootNode, searchPath, pathLength
- if the number of card fields > 0 then
- put the id of card field 1 into rootNode
- else
- put 0 into rootNode
- end if
- put empty into searchPath
- put 0 into pathLength
- walkTree
- end openCard
-
- on deleteCard
- global searchPath, pathLength
- put empty into searchPath
- put 0 into pathLength
- end deleteCard
-
- on closeCard
- undoPlot
- put empty into field treeList
- end closeCard
-
- on defineStruct
- global rootRect, rootLoc, hSpacing, vSpacing, rootLevel
- put "241,148,271,163" into rootRect
- put "256,155" into rootLoc
- put "16,32,64,128" into hSpacing
- put "30,30,30,30" into vSpacing
- put 4 into rootLevel
- end defineStruct
-
- on eraseTree
- global rootNode, seachPath, pathLength
- choose select tool
- drag from 0,0 to 512,342
- doMenu "Clear Picture"
- choose field tool
- repeat with i = the number of card fields down to 1
- click at the loc of card field i
- doMenu "Clear Field"
- end repeat
- put 0 into rootNode
- put empty into searchPath
- put 0 into pathLength
- choose browse tool
- end eraseTree
-
- on initPlot targetNode
- global searchPath, pathLength
- undoPlot
- put targetNode into line 1 of searchPath
- put the loc of card field id targetNode into line 2 of searchPath
- put 2 into pathLength
- set the style of card field id targetNode to shadow
- set the lineSize to 2
- choose line tool
- end initPlot
-
- on termPlot
- set the lineSize to 1
- choose browse tool
- end termPlot
-
- on pathPlot targetNode
- global searchPath, pathLength
- if targetNode ≠ 0 then
- add 1 to pathLength
- put targetNode into line pathLength of searchPath
- add 1 to pathLength
- put the loc of card field id targetNode into line pathLength of searchPath
- set the style of card field id targetNode to shadow
- drag from line pathLength - 2 of searchPath to line pathLength of searchPath
- end if
- end pathPlot
-
- on undoPlot
- global searchPath, pathLength
- if pathLength > 0 then
- choose line tool
- put line 1 of searchPath into targetNode
- set the style of card field id targetNode to rectangle
- put line 2 of searchPath into parentLoc
- put 3 into pathIndex
- repeat while pathIndex < pathLength
- put line pathIndex of searchPath into targetNode
- add 1 to pathIndex
- get line pathIndex of searchPath
- add 1 to pathIndex
- set the style of card field id targetNode to rectangle
- set the lineSize to 2
- drag from parentLoc to it with optionKey
- set the lineSize to 1
- drag from parentLoc to it
- put it into parentLoc
- end repeat
- put empty into searchPath
- put 0 into pathLength
- choose browse tool
- end if
- end undoPlot
-
- function searchTree key
- global rootNode, rootLevel
- global parentSide, parentNode, parentLevel, targetNode
- put 0 into parentSide
- put 0 into parentNode
- put rootLevel + 1 into parentLevel
- if rootNode = 0 then
- put 0 into targetNode
- return "missing"
- else
- initPlot rootNode
- if key = line 1 of card field id rootNode then
- put rootNode into targetNode
- return "found"
- end if
- end if
- put rootNode into parentNode
- put rootLevel into parentLevel
- put 0 into targetNode
- repeat while true
- get line 1 of card field id parentNode
- if key < it then
- put 2 into parentSide
- get line 2 of card field id parentNode
- if it ≠ 0 then
- pathPlot it
- if key = line 1 of card field id it then
- put it into targetNode
- return "found"
- else
- put it into parentNode
- subtract 1 from parentLevel
- end if
- else
- return "missing"
- end if
- else
- if key > it then
- put 3 into parentSide
- get line 3 of card field id parentNode
- if it ≠ 0 then
- pathPlot it
- if key = line 1 of card field id it then
- put it into targetNode
- return "found"
- else
- put it into parentNode
- subtract 1 from parentLevel
- end if
- else
- return "missing"
- end if
- end if
- end if
- end repeat
- end searchTree
-
- function newNode nodeLoc
- global rootRect
- choose field tool
- doMenu "New Field"
- get the number of card fields
- get the id of card field it
- set the rect of card field id it to rootRect
- set the loc of card field id it to nodeLoc
- set the style of card field id it to rectangle
- set the textFont of card field id it to geneva
- set the textSize of card field id it to 9
- set the textAlign of card field id it to center
- set the lockText of card field id it to true
- put 0 into line 2 of card field id it
- put 0 into line 3 of card field id it
- return it
- end newNode
-
- function getNodeLoc parentSide, parentNode, parentLevel
- global rootLoc, hSpacing, vSpacing
- if parentNode = 0 then
- return rootLoc
- else
- put the loc of card field id parentNode into nodeLoc
- get item parentLevel of vSpacing
- add it to item 2 of nodeLoc
- get item parentLevel of hSpacing
- if parentSide = 2 then
- subtract it from item 1 of nodeLoc
- else
- add it to item 1 of nodeLoc
- end if
- return nodeLoc
- end if
- end getNodeLoc
-
- function makeNode parentSide, parentNode, parentLevel
- global rootLoc
- if parentNode = 0 then
- get newNode( rootLoc )
- initPlot it
- return it
- else
- put getNodeLoc( parentSide, parentNode, parentLevel ) into nodeLoc
- get newNode( nodeLoc )
- put it into line parentSide of card field id parentNode
- choose line tool
- pathPlot it
- return it
- end if
- end makeNode
-
- function insertNode key
- global rootNode, parentSide, parentNode, parentLevel
- get searchTree( key )
- if it = "found" then
- termPlot
- return "duplicate"
- end if
- if parentLevel = 0 then
- termPlot
- return "full"
- end if
- put makeNode( parentSide, parentNode, parentLevel ) into theNode
- put key into line 1 of card field id theNode
- if parentNode = 0 then put theNode into rootNode
- termPlot
- return "inserted"
- end insertNode
-
- on moveSubTree parentSide, parentNode, parentLevel, nextNode
- if nextNode ≠ 0 then
- put the loc of card field id nextNode into oldLoc
- put getNodeLoc( parentSide, parentNode, parentLevel ) into newLoc
- set the loc of card field id nextNode to newLoc
- get line 2 of card field id nextNode
- if it ≠ 0 then
- drag from oldLoc to the loc of card field id it with optionKey
- moveSubTree 2, nextNode, parentLevel - 1, it
- end if
- get line 3 of card field id nextNode
- if it ≠ 0 then
- drag from oldLoc to the loc of card field id it with optionKey
- moveSubTree 3, nextNode, parentLevel - 1, it
- end if
- if parentNode ≠ 0 then
- drag from the loc of card field id parentNode to newLoc
- end if
- end if
- end moveSubTree
-
- function removeNode parentSide, parentNode, parentLevel, targetNode
- global rootNode
- put line 1 of card field id targetNode into key
- if line 2 of card field id targetNode = 0 then
- put line 3 of card field id targetNode into nextNode
- else
- put line 2 of card field id targetNode into nextNode
- end if
- choose line tool
- if parentNode ≠ 0 then
- drag from the loc of card field id parentNode to the loc of card field id targetNode with optionKey
- set the lineSize to 1
- end if
- if nextNode ≠ 0 then
- drag from the loc of card field id targetNode to the loc of card field id nextNode with optionKey
- end if
- choose field tool
- click at the loc of card field id targetNode
- doMenu "Clear Field"
- if parentNode ≠ 0 then
- put nextNode into line parentSide of card field id parentNode
- end if
- if targetNode = rootNode then put nextNode into rootNode
- choose line tool
- moveSubTree parentSide, parentNode, parentLevel, nextNode
- return key
- end removeNode
-
- on findNext
- global parentSide, parentNode, parentLevel, targetNode
- put "Looking for the successor to node" && line 1 of card field id targetNode into message
- put 3 into parentSide
- put targetNode into parentNode
- subtract 1 from parentLevel
- put line 3 of card field id parentNode into targetNode
- pathPlot targetNode
- get line 2 of card field id targetNode
- repeat while it ≠ 0
- put 2 into parentSide
- put targetNode into parentNode
- subtract 1 from parentLevel
- put it into targetNode
- pathPlot it
- get line 2 of card field id targetNode
- end repeat
- end findNext
-
- function deleteNode key
- global parentSide, parentNode, parentLevel, targetNode, pathLength
- get searchTree( key )
- if it = "missing" then
- termPlot
- return it
- end if
- if line 2 of card field id targetNode = 0 or line 3 of card field id targetNode = 0 then
- get removeNode( parentSide, parentNode, parentLevel, targetNode )
- else
- put targetNode into oldTargetNode
- findNext
- get removeNode( parentSide, parentNode, parentLevel, targetNode )
- put it into line 1 of card field id oldTargetNode
- end if
- subtract 2 from pathLength
- termPlot
- return "deleted"
- end deleteNode
-
- on traverseTree theNode
- global listLine
- if theNode ≠ 0 then
- traverseTree line 2 of card field id theNode
- add 1 to listLine
- put line 1 of card field id theNode into line listLine of field treeList
- traverseTree line 3 of card field id theNode
- end if
- end traverseTree
-
- on makeSubTree parentNode, parentLevel
- if parentLevel > 0 then
- get makeNode( 2, parentNode, parentLevel )
- makeSubTree it, parentLevel - 1
- get makeNode( 3, parentNode, parentLevel )
- makeSubTree it, parentLevel - 1
- end if
- end makeSubTree
-
- on enumTree
- global rootLoc, rootLevel, rootNode
- put newNode( rootLoc ) into rootNode
- makeSubTree rootNode, rootLevel
- choose browse tool
- end enumTree
-
- on newTree
- eraseTree
- put empty into field treeList
- put "The tree is empty" into message
- end newTree
-
- function sideName parentSide
- if parentSide = 2 then
- return "left"
- else
- return "right"
- end if
- end sideName
-
- on findNode
- global parentSide, parentNode, parentLevel, targetNode
- ask "3 digit search key?"
- put it into key
- get searchTree( key )
- termPlot
- if it = "found" then
- put "Node" && key && "found" into message
- else
- if parentNode = 0 then
- put "The tree is empty" into message
- else
- put "Node" && key && "missing" && sideName( parentSide ) && "of node" && line 1 of card field id parentNode into message
- end if
- end if
- choose browse tool
- end findNode
-
- on putInNode
- global parentSide, parentNode, parentLevel, targetNode
- ask "3 digit node key?"
- put it into key
- get insertNode( key )
- if it = "duplicate" then
- put "Node" && key && "already exists" into message
- else
- if it = "full" then
- put "No room to insert node" && key && sideName( parentSide ) && "of node" && line 1 of card field id parentNode into message
- else
- put empty into field treeList
- if parentNode = 0 then
- put "Node" && key && "inserted as the root node" into message
- else
- put "Node" && key && "inserted" && sideName( parentSide ) && "of node" && line 1 of card field id parentNode into message
- end if
- end if
- end if
- choose browse tool
- end putInNode
-
- on takeAwayNode
- global parentSide, parentNode, parentLevel, targetNode
- ask "3 digit node key?"
- put it into key
- get deleteNode( key )
- if it = "missing" then
- if parentNode = 0 then
- put "The tree is empty" into message
- else
- put "Node" && key && "missing" && sideName( parentSide ) && "of node" && line 1 of card field id parentNode into message
- end if
- else
- put empty into field treeList
- put "Node" && key && "deleted from the tree" into message
- end if
- choose browse tool
- end takeAwayNode
-
- on walkTree
- global rootNode, listLine
- undoPlot
- put empty into field treeList
- put 0 into listLine
- traverseTree rootNode
- if listLine = 0 then
- put "The tree is empty" into message
- else
- if listLine = 1 then
- put "There is only the root node in the tree" into message
- else
- put "There are" && listLine && "nodes in the tree" into message
- end if
- end if
- end walkTree
-
-
-